Упрощение глобального запуска игр с помощью Google Cloud Game Servers, теперь GA

Поскольку все больше и больше людей во всем мире обращаются к многопользовательским играм, разработчики должны масштабировать свою игру, чтобы удовлетворить растущий спрос игроков и обеспечить отличный игровой процесс, одновременно управляя сложной базовой глобальной инфраструктурой.

Чтобы решить эту проблему, многие игровые компании создают и управляют своими собственными дорогостоящими проприетарными решениями или обращаются к готовым решениям, которые ограничивают выбор и контроль разработчика.
Ранее в этом году мы объявили о выпуске бета-версии Game Servers, управляемого сервиса, созданного на основе Agones, проекта масштабирования игровых серверов с открытым исходным кодом. Игровые серверы используют Kubernetes для оркестровки контейнеров и Agones для оркестровки парка игровых серверов и управления жизненным циклом, предоставляя разработчикам современную и более простую парадигму для управления и масштабирования игр.

Сегодня мы с радостью сообщаем, что игровые серверы в целом доступны для производственных рабочих нагрузок. Упрощая управление инфраструктурой, игровые серверы позволяют разработчикам сосредоточить свои ресурсы на создании лучших игр для своих игроков. Давайте погрузимся в несколько основополагающих концепций, которые лучше проиллюстрируют, как игровые серверы помогают вам запускать игру.


Кластеры и области
Кластер игрового сервера — это концепция самого атомарного уровня в игровых серверах, и это просто кластер Kubernetes, на котором работает Agones. После определения пользователем кластеры должны быть добавлены в область.
Сферы — это определяемые пользователем группы кластеров игровых серверов, которые можно рассматривать как единое целое с точки зрения игровых клиентов. Хотя разработчики могут определять свои области по своему усмотрению, географическое распределение области обычно диктуется требованиями к задержке вашей игры. По этой причине большинство игр будут определять свои игровые миры на континентальной основе, причем миры находятся в игровых точках, таких как США, Англия и Япония, обслуживающие игроков в Северной Америке, Европе и Азии.

Независимо от того, ожидаете ли вы, что ваша игра со временем наберет обороты в определенных странах или станет глобальным хитом с первого дня, мы рекомендуем запускать несколько кластеров в одной области, чтобы обеспечить высокую доступность и плавное масштабирование.

Развертывания и конфигурации
После того, как вы определили свои области и кластеры, вы можете развернуть на них свое игровое программное обеспечение, используя концепции, которые мы называем развертываниями и конфигурациями. Развертывание игрового сервера — это глобальная запись версии программного обеспечения игрового сервера, которая может быть развернута на любом или всех кластерах игровых серверов по всему миру. Конфигурация игрового сервера определяет детали версий игрового сервера, развертываемых в ваших кластерах.
После того как вы определили эти концепции, начнут проявляться ключевые различия между агонами и игровыми серверами.

Во-первых, теперь у вас есть возможность определять свои собственные политики автоматического масштабирования. Сегментация вашей игры на области и кластеры в сочетании с самоопределяемыми политиками масштабирования предоставляет разработчикам идеальное сочетание точности, контроля и простоты. Например, вы можете указать политику на уровне области, которая автоматически выделяет больше серверов в соответствии с геозависимыми дневными игровыми шаблонами, или вы можете масштабировать все кластеры одновременно глобально для подготовки к глобальному игровому событию.

Во-вторых, у вас есть гибкость для развертывания новых двоичных файлов игрового сервера в различных регионах мира, ориентируясь на определенные области с вашими развертываниями. Это позволяет вам проводить A / B или канареечное тестирование новых версий программного обеспечения в любой выбранной вами области.

И, наконец, хотя мы создаем игровые серверы, чтобы они были максимально настраиваемыми, мы также признаем, что технологии — это только половина дела (королевская игра). Игровые эксперты Google Cloud работают вместе с вашей командой, чтобы подготовиться к успешному запуску, а игровые серверы поддерживаются поддержкой Google Cloud, чтобы ваша игра продолжала расти в долгосрочной перспективе.

Создание открытой архитектуры для игр
Ваша игра уникальна, и мы понимаем, что контроль имеет первостепенное значение для разработчиков игр. Разработчики могут в любой момент отказаться от использования игровых серверов и самостоятельно управлять кластерами Agones. Кроме того, у вас всегда есть прямой доступ к базовым кластерам Kubernetes, поэтому, если вам нужно добавить свои собственные игровые дополнения поверх установки Agones, у вас есть возможность сделать это. Вы всегда все под контролем.
Выбор также важен. Сегодня игровые серверы поддерживают кластеры, работающие на Google Kubernetes Engine, и в настоящее время мы работаем над возможностью запускать ваши кластеры в любой среде, будь то Google Cloud, другие облака или локально.

Благодаря поддержке гибридных и мультиоблачных сред разработчики смогут свободно запускать рабочие нагрузки игровых серверов там, где это будет удобно для игрока. Вы также можете использовать настраиваемые политики масштабирования игровых серверов, чтобы оптимизировать стоимость развертывания глобального парка в гибридных и мультиоблачных средах по своему усмотрению.

Как клиент Google Cloud в течение многих лет, мы внимательно следим за развитием игровых серверов Google Cloud, мы считаем, что контейнеры и мультиоблачные возможности чрезвычайно важны для будущие крупные многопользовательские игры, и Google Cloud продолжает доказывать свою приверженность разработчикам игр, создавая гибкие открытые решения, которые масштабируются по всему миру
сказал Эллиот Гозанкси, руководитель отдела архитектуры Square Enix

Игровые серверы бесплатны до конца года, и вам будет выставлен счет только за базовое использование кластеров Kubernetes. Чтобы узнать больше об игровых серверах, посетите нашу страницу продукта для игровых серверов или сразу же начните с нашего краткого руководства. Вы также можете присоединиться к нам для разработки решений для запуска массовых глобальных игр в облаке на сайте Google Cloud Next '20: OnAir (зарегистрируйтесь здесь бесплатно) и узнайте больше о том, как Google Cloud помогает разработчикам игр всех размеров объединять свои игры с игроками из разных стран. Мир.

cloud.google.com/game-servers
cloud.google.com/game-servers/docs/quickstart
cloud.withgoogle.com/next/sf/sessions?session=DEV211
cloud.withgoogle.com/next/sf/

Упрощенное глобальное управление игрой: представление игровых серверов



Чтобы обеспечить многопользовательские игровые возможности, ожидаемые игроками, разработчики игр все чаще полагаются на выделенные игровые серверы в качестве опции по умолчанию для подключения игроков. Но размещение и масштабирование парка игровых серверов для поддержки глобальной игры может быть сложной задачей, и многие игровые компании либо заканчивают создавать дорогостоящие проприетарные решения, либо обращаются к готовым решениям, которые ограничивают выбор разработчика и контроль над ним.

Agones, проект хостинга и масштабирования игрового сервера с открытым исходным кодом, построенный на Kubernetes, был основан Google Cloud и Ubisoft, чтобы предложить более простой вариант. Он предоставляет разработанную сообществом альтернативу проприетарным решениям, которая также дает разработчикам свободу плавного размещения и масштабирования кластеров игровых серверов в нескольких средах — в нескольких облаках, в помещениях или на локальных компьютерах.

Алехандро Гонсалес, гроссмейстер Jam City Bogota поделился своим опытом использования Agones для мобильной стратегической игры в реальном времени World Doh: «Agones был ключевым элементом в нашей стратегии ретрансляции, поскольку он позволил нам легко администрировать ретрансляторы на основе Kubernetes для World War Doh. Agones сэкономили нам драгоценное время, необходимое для создания собственного аналога, и, кроме того, сделали нашу реализацию универсальной и доступной для работы с несколькими облачными провайдерами ».

Сегодня мы объявляем о выпуске бета-версии Game Servers, управляемой службы Agones. В то время как Agones идеально подходит для управления региональными кластерами игровых серверов, игровые серверы нагружают Agones, чтобы упростить управление глобальными мультикластерными парками игровых серверов.

Если вы уже используете Agones в рабочих нагрузках, вы можете включить управляемую службу, просто зарегистрировав кластеры игровых серверов, управляемых Agones, с помощью нового API игровых серверов. И вы можете отказаться от управляемой службы в любое время, если хотите вернуться к ручному управлению.

Вы также можете сгруппировать эти кластеры в концепцию, которую мы называем сферами, — логические группы кластеров Kubernetes, разработанные с учетом требований к задержке игры. Затем вы можете определить конфигурации игрового сервера и политики масштабирования, чтобы упростить управление парком по всем сферам и кластерам в них, сохраняя при этом контроль и видимость.

Игровые серверы могут помочь вам спланировать различные сценарии. Например, вы можете увеличить зарезервированную емкость игровых серверов для запланированного игрового события или для определенного диапазона даты и времени. Кроме того, вы можете автоматизировать масштабирование для учета ежедневных пиковых и непиковых часов в разных регионах. Гибкость развертывания игровых серверов также означает, что вы можете A / B тестировать различные конфигурации игровых серверов и тестировать канареечные изменения, откатывая их при необходимости.

В бета-версии игровые серверы первоначально будут поддерживать кластеры, работающие только на Google Kubernetes Engine (GKE), и мы будем усердно работать над поддержкой гибридных и мульти-облачных сред на конец этого года. Вторая половина 2020 года также принесет более продвинутые политики масштабирования и более глубокую интеграцию с нашей структурой открытых матчей Open Match. Узнайте больше о том, как начать работу с игровыми серверами, здесь.

Игровые серверы — это новейшее решение в постоянных усилиях Google Cloud, помогающее разработчикам игр избавиться от сложности при управлении инфраструктурой. Такие компании, как Activision Blizzard, извлекают выгоду из нашей высоконадежной глобальной сети, расширенных возможностей анализа данных и искусственного интеллекта (ИИ), а также приверженности открытому исходному коду, чтобы предоставить своим игрокам отличный игровой опыт.

Присоединяйтесь к нашей цифровой трансляции Google для игр в понедельник, 23 марта, чтобы узнать мнение экспертов Google и ведущих игровых компаний, таких как Improbable, Grenge, Colopl и Unity, которые используют нашу технологию для поднятия своих игр на новый уровень. Учить больше.

events.withgoogle.com/gdc2020/#content
cloud.google.com/game-servers

Промоушен: использование сервиса Game Servers не требует дополнительных сборов до 31 декабря 2020 года; вам будет выставлен счет только за основное использование кластеров Kubernetes, связанное с использованием вами службы игровых серверов.

Начиная с января 2021 года, за первый кластер, которым управляет Google, по-прежнему не взимается дополнительная плата, но Google будет выставлять вам счет за каждый дополнительный кластер по цене 0,50 долл. США в час за кластер.

Развертывание игровых серверов с Agones на OVH Managed Kubernetes

Одним из ключевых преимуществ использования Kubernetes является огромная экосистема вокруг него. От Rancher до Istio, от Rook до Fission, от gVisor до KubeDB, экосистема Kubernetes богата, динамична и постоянно растет. Мы подошли к тому, что для большинства потребностей в развертывании мы можем сказать, что для этого существует проект с открытым исходным кодом на основе K8s.

Одним из последних дополнений к этой экосистеме является проект Agones, многопользовательский, выделенный хостинг на игровом сервере с открытым исходным кодом, построенный на Kubernetes, разработанный Google в сотрудничестве с Ubisoft. Проект был анонсирован в марте, и уже наделал немало шума…

В OVH Platform Team мы являемся поклонниками онлайн-игр и Kubernetes, поэтому мы сказали себе, что нам нужно протестировать Agones. И какой лучший способ проверить это, чем развернуть его в нашей службе OVH Managed Kubernetes, установить кластер игровых серверов Xonotic и сыграть в старом классе с коллегами?



Почему агон?
Agones (происходит от греческого слова agōn, конкурсы, проводимые во время публичных фестивалей или, в более широком смысле, «соревнование» или «соревнование в играх»), стремится заменить обычные проприетарные решения для развертывания, масштабирования и управления игровыми серверами.
www.merriam-webster.com/dictionary/agones
kubernetes.io/docs/concepts/api-extension/custom-resources/#custom-controllers
kubernetes.io/docs/concepts/api-extension/custom-resources/#customresourcedefinitions

Agones обогащает Kubernetes пользовательским контроллером и пользовательским определением ресурса. С их помощью вы можете стандартизировать инструменты и API Kubernetes для создания, масштабирования и управления кластерами игровых серверов.

Подождите, о каких игровых серверах вы говорите?
Итак, основное внимание Agones уделяют многопользовательским онлайн-играм, таким как FPS и MOBA, быстрым играм, требующим выделенных игровых серверов с малой задержкой, которые синхронизируют состояние игры между игроками и служат источником правды в игровых ситуациях.

Игры такого типа требуют относительно эфемерных выделенных игровых серверов, причем каждое совпадение выполняется на экземпляре сервера. Серверы должны быть с состоянием (они должны сохранять статус игры), причем состояние обычно хранится в памяти на время матча.

Задержка является ключевой проблемой, поскольку конкурентные аспекты игр в реальном времени требуют быстрого ответа от сервера. Это означает, что подключение от устройства игрока к игровому серверу должно быть максимально прямым, в идеале, в обход любого промежуточного сервера, такого как балансировщик нагрузки.

А как вы подключаете плееры к нужному серверу?
Каждый издатель игр имел свои собственные проприетарные решения, но большинство из них следуют аналогичному потоку, предлагая сервис по подбору игроков, который объединяет игроков в матчи, взаимодействует с менеджером кластера для предоставления выделенного экземпляра игрового сервера и отправки игрокам его IP-адрес и порт, чтобы позволить им напрямую подключаться к серверу и играть в игру.



Agones и его пользовательский контроллер и пользовательское определение ресурса заменяет сложную инфраструктуру управления кластером стандартизированными инструментами и API на основе Kubernetes. Службы сватов взаимодействуют с этими API-интерфейсами для создания новых модулей игровых серверов и передачи их IP-адресов и портов заинтересованным игрокам.



Вишня на торте
Использование Kubernetes для этих задач также дает приятный дополнительный бонус, например, возможность развертывать полную игровую инфраструктуру в среде разработчика (или даже в мини-кубе) или легко клонировать ее для развертывания в новом центре обработки данных или облачной области, но также предлагая целую платформу для размещения всех дополнительных услуг, необходимых для создания игры: управление учетными записями, списки лидеров, инвентарь
github.com/kubernetes/minikube

И, конечно же, простота эксплуатации платформ на базе Kubernetes, особенно когда они динамические, разнородные и распределенные, как большинство игровых онлайн-платформ.

Развертывание Agones на управляемых OVH Kubernetes
Есть несколько способов установить Agones в кластер Kubernetes. Для нашего теста мы выбрали самый простой: установка с помощью Helm.
helm.sh/

Включение создания ресурсов RBAC
Первым шагом для установки Agones является настройка учетной записи службы с достаточными разрешениями для создания некоторых специальных типов ресурсов RBAC.
kubectl create clusterrolebinding cluster-admin-binding \
  --clusterrole=cluster-admin --serviceaccount=kube-system:default

Теперь у нас есть Cluster Role Binding, необходимая для установки.
kubernetes.io/docs/reference/access-authn-authz/rbac/#rolebinding-and-clusterrolebinding

Установка диаграммы Agones
Теперь давайте продолжим, добавив хранилище Agones в список хранилищ Helm.
helm repo add agones https://agones.dev/chart/stable

И затем установка стабильной диаграммы Agones:
helm install --name my-agones --namespace agones-system agones/agones

agones.dev/site/docs/installation/helm/

Установка, которую мы только что выполнили, не подходит для производства, так как в официальных инструкциях по установке рекомендуется использовать Agones и игровые серверы в отдельных выделенных пулах узлов. Но для нужд нашего теста достаточно базовой настройки.

Подтверждение Agones началось успешно
Чтобы убедиться, что Agones работает в нашем кластере Kubernetes, мы можем взглянуть на модули в пространстве имен agones-system:
kubectl get --namespace agones-system pods

Если все в порядке, вы должны увидеть модуль контроллера agones со статусом Running:
$ kubectl get --namespace agones-system pods
NAME                                 READY   STATUS    RESTARTS   AGE
agones-controller-5f766fc567-xf4vv   1/1     Running   0          5d15h
agones-ping-889c5954d-6kfj4          1/1     Running   0          5d15h
agones-ping-889c5954d-mtp4g          1/1     Running   0          5d15h


Вы также можете увидеть более подробную информацию, используя:
kubectl describe --namespace agones-system pods


Глядя на описание agones-контроллера, вы должны увидеть что-то вроде:
$ kubectl describe --namespace agones-system pods
Name:               agones-controller-5f766fc567-xf4vv
Namespace:          agones-system
[...]
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True

Где все Условия должны иметь статус True.

Развертывание игрового сервера
Мир Agones Hello довольно скучный, простой эхо-сервер UDP, поэтому мы решили пропустить его и перейти непосредственно к чему-то более интересному: игровому серверу Xonotic.
github.com/GoogleCloudPlatform/agones/tree/release-0.9.0/examples/simple-udp
github.com/GoogleCloudPlatform/agones/blob/release-0.9.0/examples/xonotic
www.xonotic.org/

Xonotic — это многопользовательский FPS с открытым исходным кодом, довольно неплохой, с множеством интересных игровых режимов, карт, оружия и опций настройки.

Развернуть игровой сервер Xonotic поверх Agones довольно просто:
kubectl create -f https://raw.githubusercontent.com/GoogleCloudPlatform/agones/release-0.9.0/examples/xonotic/gameserver.yaml


Развертывание игрового сервера может занять несколько минут, поэтому нам нужно подождать, пока его состояние не станет «Готов», прежде чем использовать его. Мы можем получить статус с:
kubectl get gameserver


Мы ждем, пока извлечение не даст статус Ready на нашем игровом сервере:
$ kubectl get gameserver
NAME      STATE   ADDRESS         PORT   NODE       AGE
xonotic   Ready   51.83.xxx.yyy   7094   node-zzz   5d

Когда игровой сервер готов, мы также получаем адрес и порт, который мы должны использовать для подключения к нашей игре Deathmatch (в моем примере, 51.83.xxx.yyy: 7094).

Время фрагмента
Теперь, когда у нас есть сервер, давайте проверим его!

Мы загрузили клиент Xonotic для наших компьютеров (он работает на Windows, Linux и MacOS, так что оправданий нет) и запустили его:


Затем мы идем в многопользовательское меню и вводим адрес и порт нашего игрового сервера:


И мы готовы играть!


А на стороне сервера?
Со стороны сервера мы можем следить за тем, как идут дела на нашем игровом сервере, используя логи kubectl. Давайте начнем с поиска модуля, на котором запущена игра:
kubectl get pods


Мы видим, что наш игровой сервер работает в модуле под названием xonotic:
$ kubectl get pods 
NAME      READY   STATUS    RESTARTS   AGE
xonotic   2/2     Running   0          5d15h


Затем мы можем использовать логи kubectl. В модуле есть два контейнера, основной ксонотический и колонтитул Agones, поэтому мы должны указать, что нам нужны журналы ксонотического контейнера:
$ kubectl logs xonotic
Error from server (BadRequest): a container name must be specified for pod xonotic, choose one of: [xonotic agones-gameserver-sidecar]
$ kubectl logs xonotic xonotic
>>> Connecting to Agones with the SDK
>>> Starting health checking
>>> Starting wrapper for Xonotic!
>>> Path to Xonotic server script: /home/xonotic/Xonotic/server_linux.sh 
Game is Xonotic using base gamedir data
gamename for server filtering: Xonotic
Xonotic Linux 22:03:50 Mar 31 2017 - release
Current nice level is below the soft limit - cannot use niceness
Skeletal animation uses SSE code path
execing quake.rc
[...]
Authenticated connection to 109.190.xxx.yyy:42475 has been established: client is v6xt9/GlzxBH+xViJCiSf4E/SCn3Kx47aY3EJ+HOmZo=@Xon//Ks, I am /EpGZ8F@~Xon//Ks
LostInBrittany is connecting...
url_fclose: failure in crypto_uri_postbuf
Receiving player stats failed: -1
LostInBrittany connected
LostInBrittany connected
LostInBrittany is now spectating
[BOT]Eureka connected
[BOT]Hellfire connected
[BOT]Lion connected
[BOT]Scorcher connected
unconnected changed name to [BOT]Eureka
unconnected changed name to [BOT]Hellfire
unconnected changed name to [BOT]Lion
unconnected changed name to [BOT]Scorcher
[BOT]Scorcher picked up Strength
[BOT]Scorcher drew first blood! 
[BOT]Hellfire was gunned down by [BOT]Scorcher's Shotgun
[BOT]Scorcher slapped [BOT]Lion around a bit with a large Shotgun
[BOT]Scorcher was gunned down by [BOT]Eureka's Shotgun, ending their 2 frag spree
[BOT]Scorcher slapped [BOT]Lion around a bit with a large Shotgun
[BOT]Scorcher was shot to death by [BOT]Eureka's Blaster
[BOT]Hellfire slapped [BOT]Eureka around a bit with a large Shotgun, ending their 2 frag spree
[BOT]Eureka slapped [BOT]Scorcher around a bit with a large Shotgun
[BOT]Eureka was gunned down by [BOT]Hellfire's Shotgun
[BOT]Hellfire was shot to death by [BOT]Lion's Blaster, ending their 2 frag spree
[BOT]Scorcher was cooked by [BOT]Lion
[BOT]Eureka turned into hot slag
[...]


Добавьте друзей
Следующий шаг в основном приятен: попросить коллег подключиться к серверу и провести настоящий Deathmatch, как в Quake 2 раза.

И сейчас?
У нас есть работающий игровой сервер, но мы едва раскрыли возможности Agones: развертывание флота (набор теплых GameServer, доступных для распределения), тестирование FleetAutoscaler (для автоматического увеличения и уменьшения флота в ответ на спрос), делая некоторые фиктивные услуги распределителя. В будущих публикациях в блоге мы углубимся в это и рассмотрим эти возможности.
agones.dev/site/docs/tutorials/allocator-service-go/
agones.dev/site/docs/reference/fleet/
agones.dev/site/docs/reference/fleetautoscaler/

И в более широком контексте мы собираемся продолжить наше исследовательское путешествие по Агонесу. Проект еще очень молодой, ранняя альфа, но он показывает некоторые впечатляющие перспективы.